<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>InfinityJEEEU Java Code Generator</title>
        <link href="../css/default.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>
    </head>   
    <body>
        <div id="wrapper">
        <div id="header_wide">
    <div id="logo">
        <h1><a href="../html/index.html">无垠式Java通用代码生成器</a></h1>
        <h2><a href="../html/index.html">自2014年起为公众服务</a></h2>
    </div>
    <!-- end div#logo -->
    <!-- end div#menu -->
	</div>
            <!-- end div#header -->
            <div id="page_wide">
                <div id="content_wide">
	<h3>代码生成器技术乱弹三，所有字段搜索的主查询SearchByFieldsByPage</h3>
	<p>对动词算子式代码生成器有所了解的同学都知道，动词算子式代码生成器有过两种界面，手写的蓝白两色的界面和后来的JQuery EasyUI界面。两者其实是不同的，支持的功能也并不完全一致。蓝白界面或者我们称之为经典界面支持如下的动词：ListAllByPage,SearchByName,Add,Update,Delete,SoftDelete,DeleteAll和SoftDeleteAll。而新的EasyUI界面支持更多的动词，如下SearchByFieldsByPage,Add,Update,Delete,SoftDelete,DeleteAll，SoftDeleteAll，Toggle和ToggleOne。</p>

	<p>很明显最大的不同是新的界面采用了所有字段的查询动词SearchByFieldsByPage，代替了原有实现中的ListAllByPage和SearchByName两个动词。这个动词是现有所有动词中最复杂和最难开发的动词。本文着重分析这个动词的实现。</p>

	<p>很直观，这个动词的场景如下：当页面加载时，相当于不加任何限制条件查询某域对象的数据库表，应该返回所有表中的数据，这种情况下，返回的数据其实和ListAllByPage是完全一致的。而如果查询domainname，这时返回的结果是和SearchByNameByPage是一致的。但是新的主查询支持对更多字段的查询。</p>

	<p>这个动词的难点是要生成正确的动态的查询语句，并以正确的顺序和数量设置查询键值并返回结果。在其MyBati实现和JDBC实现中都使用了类似技术。</p>

	<p>关键是要对字段逐一判断其是否为空，如果为空，就不生成相应字段的查询和设置键值的两段操作。值得注意的是这两段查询的位置顺序和判断空的条件必须完全匹配，否则会出现千奇百怪的错误。</p>

	<p>在我的实现中查询逻辑是和字段的类型绑定在一起的，是String类型进行like查询，其他字段进行相等查询。实现的结果您可以参考代码生成器的生成物或者代码生成器本身的源码。</p>
  </div>
                <!-- end div#content -->
                <div id="sidebar">
                    <!--ul-->
                    	<!-- Common Navigation Panel for our site -->
						<li id="submenu">
						    <h2>功能菜单</h2>
						    <ul>
						    　	<li><a href="../html/index.html">使用SGS生成代码</a></li>
						        <li><a href="../html/parseexcel.html">使用Excel生成代码</a></li>
						      	<li><a href="luantan_index.html">动词算子式代码生成器简介</a></li>
								<li><a href="luantan_1.html">代码生成器技术乱弹一，多对多关系与双域动词</a></li>
								<li><a href="luantan_2.html">代码生成器技术乱弹二，一对多关系的分析与实现</a></li>
								<li><a href="luantan_3.html">代码生成器技术乱弹三，所有字段搜索的主查询</a></li>
								<li><a href="luantan_4.html">代码生成器技术乱弹四，弹性万能界面</a></li>
								<li><a href="luantan_5.html">代码生成器技术乱弹五，动词算子浅析</a></li>
								<li><a href="luantan_6.html">代码生成器技术乱弹六，编译器在拈花微笑</a></li>
								<li><a href="luantan_7.html">代码生成器技术乱弹七，动词算子式代码生成器的透明性</a></li>
								<li><a href="luantan_8.html">代码生成器技术乱弹八，系统族与笛卡尔空间</a></li>
								<li><a href="luantan_9.html">代码生成器技术乱弹九，代码变变变，代码生成器之度量</a></li>
								<li><a href="luantan_10.html">代码生成器技术乱弹十，动词与多维空间，动词变格理论简述</a></li>
								<li><a href="luantan_11.html">代码生成器技术乱弹十一，伽罗华理论与代码生成器</a></li>
								<li><a href="luantan_12.html">代码生成器技术乱弹十二，步枪，T型车到代码生成器，模板法的工业魔术</a></li>

						    </ul>
						</li>
                    <!--/ul-->
                </div>
                <!-- end div#sidebar -->
                <div style="clear: both; height: 1px"></div>
            </div>
            <!-- Common footer for our site -->
			<div id="footer_wide">
			    <p id="legal">作者：火鸟  电邮:jerry_shen_sjf@qq.com QQ群:277689737<br/>
			    </p>
			</div>
        </div>
        <!-- end div#wrapper -->
</body>
</html>